home *** CD-ROM | disk | FTP | other *** search
/ SuperHack / SuperHack CD.bin / CODING / PASCAL / ALLSWAGS.ZIP / SWAGG-M.ZIP / MISC.SWG / 0154_BASM Min-Max.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1995-05-27  |  4.0 KB  |  187 lines

  1.  
  2. {
  3.   unit Arit:  routine di calcolo numerico.
  4. }
  5. unit Arit;
  6.  
  7. {$D-,L-,G+,N+}
  8.  
  9. interface
  10.  
  11. function Max(X,Y : integer) : integer;
  12.   {- Restituisce il massimo tra A e B.}
  13.  
  14. function Min(X,Y : integer) : integer;
  15.   {- Restituisce il minimo tra A e B.}
  16.  
  17. function LongMax(A,B : longint) : longint;
  18.   {- Restituisce il massimo tra A e B (longint).}
  19.  
  20. function LongMin(A,B : longint) : longint;
  21.   {- Restituisce il minimo tra A e B (longint).}
  22.  
  23. function InRange(V,A,B : integer) : boolean;
  24.   {- Restituisce true se V è compreso tra A e B (estrami inclusi).}
  25.  
  26. function OutRange(V,A,B : integer) : boolean;
  27.   {- Restituisce true se V non è compreso tra A e B.}
  28.  
  29. function LongInRange(V,A,B : longint) : boolean;
  30.   {- Restituisce true se V è compreso tra A e B (estrami inclusi).}
  31.  
  32. function LongOutRange(V,A,B : longint) : boolean;
  33.   {- Restituisce true se V non è compreso tra A e B.}
  34.  
  35. function LongToInt(V : longint) : integer;
  36.   {- Converte da longinteger ad integer, restituendo MaxInt o -MaxInt nel caso
  37.      V sia fuori dal range degli interi.}
  38.  
  39. function IntToShort(V : integer) : shortint;
  40.   {- Converte da integer ad shortint, restituendo 127 o -128 nel caso
  41.      V sia fuori dal range degli shortint.}
  42.  
  43. function CompToLongInt(V : Comp):longint;
  44.   {- Converte da comp ad longint, restituendo MaxLongint o -MaxLongInt nel caso
  45.      V sia fuori dal range dei longint.}
  46.  
  47. function CompToInt(V : Comp):integer;
  48.   {- Converte da comp ad longint, restituendo Maxint o -MaxInt nel caso
  49.      V sia fuori dal range degli interi.}
  50.  
  51. implementation {==============================================================}
  52.  
  53. function Min(X,Y : integer) : integer; assembler;
  54. asm
  55.   mov    ax,X
  56.   cmp    ax,Y
  57.   jle    @@1
  58.   mov    ax,Y
  59. @@1:
  60. end;  { Min }
  61.  
  62. function Max(X,Y : integer) : integer; assembler;
  63. asm
  64.   mov    ax,X
  65.   cmp    ax,Y
  66.   jge    @@1
  67.   mov    ax,Y
  68. @@1:
  69. end;  { Max }
  70.  
  71. function LongMin(A,B : longint) : longint; assembler;
  72. asm
  73.   mov   ax, word ptr [A]
  74.   mov   dx, word ptr [A+2]
  75.   mov   bx, word ptr [B]
  76.   mov   cx, word ptr [B+2]
  77.   cmp   dx,cx
  78.   jl    @@1
  79.   jg    @@2
  80.   cmp   ax,bx
  81.   jbe   @@1
  82. @@2:
  83.   mov   ax,bx
  84.   mov   dx,cx
  85. @@1:
  86. end;  { LongMin }
  87.  
  88. function LongMax(A,B : longint) : longint; assembler;
  89. asm
  90.   mov   ax, word ptr [A]
  91.   mov   dx, word ptr [A+2]
  92.   mov   bx, word ptr [B]
  93.   mov   cx, word ptr [B+2]
  94.   cmp   dx,cx
  95.   jg    @@1
  96.   jl    @@2
  97.   cmp   ax,bx
  98.   jae   @@1
  99. @@2:
  100.   mov   ax,bx
  101.   mov   dx,cx
  102. @@1:
  103. end;  { LongMax }
  104.  
  105. function InRange(V,A,B : integer) : boolean; assembler;
  106. asm
  107.   mov   ax,V
  108.   cmp   ax,A
  109.   jl    @1
  110.   cmp   ax,B
  111.   jg    @1
  112.   mov   ax,1
  113.   jmp   @2
  114. @1:
  115.   xor   ax,ax
  116. @2:
  117. end; { InRange }
  118.  
  119. function OutRange(V,A,B : integer) : boolean; assembler;
  120. asm
  121.   mov   ax,V
  122.   cmp   ax,A
  123.   jl    @1
  124.   cmp   ax,B
  125.   jg    @1
  126.   xor   ax,ax
  127.   jmp   @2
  128. @1:
  129.   mov   ax,1
  130. @2:
  131. end; { OutRange }
  132.  
  133. function LongInRange(V,A,B : longint) : boolean;
  134. begin
  135.   LongInRange := (V >= A) and (V <= B);
  136. end; { LongInRange }
  137.  
  138. function LongOutRange(V,A,B : longint) : boolean;
  139. begin
  140.   LongOutRange := (V < A) or (V > B);
  141. end; { LongOutRange }
  142.  
  143. function LongToInt(V : longint) : integer;
  144. begin
  145.   if V < -MaxInt then LongToInt := -MaxInt
  146.   else if V > MaxInt then LongToInt := MaxInt
  147.   else LongToInt := V;
  148. end; { LongToInt }
  149.  
  150. function IntToShort(V : integer) : shortint;
  151. begin
  152.   if V > 127 then IntToShort := 127
  153.   else if V < -128 then IntToShort := -128
  154.   else IntToShort := V;
  155. end; { IntToShort }
  156.  
  157. function CompToLongInt(V : Comp):longint;
  158. var
  159.   s : string[20];
  160.   l : longint;
  161.   e : integer;
  162. begin
  163.   if V > MaxLongInt then l := MaxLongInt
  164.   else if V < -MaxLongInt then l := -MaxLongInt
  165.   else begin
  166.     Str(V:20:0, S);
  167.     val(s, l, e);
  168.   end;
  169.   CompToLongInt := l;
  170. end; { CompToLongInt }
  171.  
  172. function CompToInt(V : Comp):integer;
  173. var
  174.   s : string[20];
  175.   i, e : integer;
  176. begin
  177.   if V > MaxInt then i := MaxInt
  178.   else if V < -MaxInt then i := -MaxInt
  179.   else begin
  180.     Str(V:20:0, S);
  181.     val(s, i, e);
  182.   end;
  183.   CompToInt := i;
  184. end; { CompToInt }
  185.  
  186.  
  187. end. { unit Arit }